package com.ibeeking.found.cms.b.rest.service;

import com.ibeeking.found.cms.api.common.dto.PageBaseInfoDTO;
import com.ibeeking.found.cms.api.common.query.PageBaseInfoQuery;
import com.ibeeking.found.cms.service.common.bo.PageBaseBO;
import com.ibeeking.found.cms.service.common.constants.enums.PageCategoryEnum;
import com.ibeeking.found.cms.service.common.param.PageBaseParam;
import com.ibeeking.found.cms.service.common.query.EffectiveByTypePageQuery;
import com.ibeeking.found.cms.service.common.query.PageBasePageQuery;
import com.ibeeking.found.cms.service.common.query.PageBaseQuery;
import com.ibeeking.found.cms.service.common.vo.EffectivePageVO;
import com.ibeeking.found.cms.service.common.vo.PageBaseVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.List;


/**
 * IPageBaseService
 *
 * @Author ibeeking
 * @Date 2021-05-08 16:05
 */
public interface IPageBaseService {

    /***
     * 查询列表
     */
    List<PageBaseBO> list(PageBaseQuery pageBaseQuery);

    /***
     * 分页查询
     */
    Page<PageBaseVO> pageList(PageBasePageQuery pageBasePageQuery);

    Page<EffectivePageVO> effectiveByTypePageList(EffectiveByTypePageQuery query);

    /***
     * 新增
     */
    Long add(PageBaseParam pageBaseParam);

    /***
     * 修改
     */
    Long modify(PageBaseParam pageBaseParam);

    /***
     * 通过id查询
     */
    PageBaseVO view(Long id);

    /***
     * 通过id查询
     */
    PageBaseBO selById(Long id);

    PageBaseBO selOneByPageCategory(PageCategoryEnum pageCategoryEnum);

    /**
     * 判断是否可以添加页面
     *
     * @param pageCategoryEnum
     * @return
     */
    Boolean canAddByPageCategory(PageCategoryEnum pageCategoryEnum);

    /***
     * 修改状态
     */
    Boolean changeStatus(Long id, Integer status);

    /***
     * 通过id删除
     */
    Boolean del(Long id);

    List<PageBaseInfoDTO> pageBaseInfoList(List<PageBaseInfoQuery> query);

    /**
     * 根据页面类型查询页面信息
     *
     * @param pageType
     * @return
     */
    List<PageBaseInfoDTO> pageBaseInfoListByPageType(Integer pageType);

}